# 可变集合set，和不可变集合frozenset(冻结)
# 而且是无须的，还会自动去重,    是无须的所以不能通过下标得到值

s1 = {3, 45, 3, 6, 45, 455, 6}  # {3, 45, 6, 455}
print(s1)
s2 = {1.34, 234, '234', '234', True, 1}  # True也是1，会去重。False也一样，每次留下谁。都有可能，
print(s2)  # 输出的顺序是无序，每台设备打印也不一样

s2.add(4)#{1.34, True, 4, 234, '234'}加进去了，但也是，无序的
print(s2)
#不可变集合，不能修改里面的值
s3 = frozenset({1, 2, 3, 4, 5, 6})
print(s3)
# s3.add(12)#'frozenset' object has no attribute 'add'.不能添加的
# print(s3)

#不可变集合frozenset对字符串的处理.参数可是任意的迭代对象，但是最后都一定是不可变集合
s6=frozenset((1, 2, 3, 4, 5, 6))
s7 =frozenset([1, 2, 3, 4, 5, 6])
print(s6)
print(s7)
s5=frozenset("23456")#frozenset({'5', '4', '6', '2', '3'})#对字符串是单个输出
print(s5)


#空集合 调用set()函数
s9 = set()#可变空集合，不能使用{}直接来定义.只能使用set函数，定义空

s11 = {}#这是字典  <class 'dict'> {}

print(type(s11), s11)

s10=frozenset()#不可变空集合


#集合中不能嵌套，可变集合。但是可以嵌套不可变集合。包括其他容器，可变的都不能，嵌套集合中
li =[1,2,3,4,5,6]#列表
tup=(1,2,3,4,5,6)#元组

s1 = {10, 20, 30}
# s2={12,234,li}# cannot use 'list' as a set element (unhashable type: 'list')
s3={12,234,tup}#元组是不可变的，可以嵌套在集合中。
 
print(s3)#
print(s2)


#集合运算
print()
ss ={1,2,3,4,5,6}
dd = {4,5,6,7,8,9}

result = ss & dd
print(result)#交集

result = ss | dd#并集，去重
print(result)

result = ss - dd#差集 ss中有的，dd没有的
print(result)


result = ss ^ dd#对称差集，先找交集，取属于交集的数。，两边都的就不输出
print(result)


